home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Source Code / Zoners Half-Life Tools / hlrad / transfers.cpp < prev    next >
C/C++ Source or Header  |  2002-12-09  |  6KB  |  201 lines

  1. #include "qrad.h"
  2.  
  3. #ifdef SYSTEM_WIN32
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include "win32fix.h"
  7. #endif
  8.  
  9. #ifdef HAVE_SYS_STAT_H
  10. #include <sys/stat.h>
  11. #endif
  12.  
  13. /*
  14.  * =============
  15.  * writetransfers
  16.  * =============
  17.  */
  18.  
  19. void            writetransfers(const char* const transferfile, const long total_patches)
  20. {
  21.     FILE           *file;
  22.  
  23.     file = fopen(transferfile, "w+b");
  24.     if (file != NULL)
  25.     {
  26.         unsigned        amtwritten;
  27.         patch_t*        patch;
  28.  
  29.         Log("Writing transfers file [%s]\n", transferfile);
  30.  
  31.         amtwritten = fwrite(&total_patches, sizeof(total_patches), 1, file);
  32.         if (amtwritten != 1)
  33.         {
  34.             goto FailedWrite;
  35.         }
  36.  
  37.         long patchcount = total_patches;
  38.         for (patch = g_patches; patchcount-- > 0; patch++)
  39.         {
  40.             amtwritten = fwrite(&patch->iIndex, sizeof(patch->iIndex), 1, file);
  41.             if (amtwritten != 1)
  42.             {
  43.                 goto FailedWrite;
  44.             }
  45.  
  46.             if (patch->iIndex)
  47.             {
  48.                 amtwritten = fwrite(patch->tIndex, sizeof(transfer_index_t), patch->iIndex, file);
  49.                 if (amtwritten != patch->iIndex)
  50.                 {
  51.                     goto FailedWrite;
  52.                 }
  53.             }
  54.  
  55.             amtwritten = fwrite(&patch->iData, sizeof(patch->iData), 1, file);
  56.             if (amtwritten != 1)
  57.             {
  58.                 goto FailedWrite;
  59.             }
  60.             if (patch->iData)
  61.             {
  62. #ifdef HLRAD_HULLU
  63.         if(g_rgb_transfers)
  64.         {
  65.             amtwritten = fwrite(patch->tRGBData, sizeof(rgb_transfer_data_t), patch->iData, file);
  66.         }
  67.         else
  68.         {
  69.             amtwritten = fwrite(patch->tData, sizeof(transfer_data_t), patch->iData, file);
  70.         }
  71. #else
  72.                 amtwritten = fwrite(patch->tData, sizeof(transfer_data_t), patch->iData, file);
  73. #endif
  74.                 if (amtwritten != patch->iData)
  75.                 {
  76.                     goto FailedWrite;
  77.                 }
  78.             }
  79.         }
  80.  
  81.         fclose(file);
  82.     }
  83.     else
  84.     {
  85.         Error("Failed to open incremenetal file [%s] for writing\n", transferfile);
  86.     }
  87.     return;
  88.  
  89.   FailedWrite:
  90.     fclose(file);
  91.     unlink(transferfile);
  92.     Warning("Failed to generate incremental file [%s] (probably ran out of disk space)\n");
  93. }
  94.  
  95. /*
  96.  * =============
  97.  * readtransfers
  98.  * =============
  99.  */
  100.  
  101. bool            readtransfers(const char* const transferfile, const long numpatches)
  102. {
  103.     FILE*           file;
  104.     long            total_patches;
  105.  
  106.     file = fopen(transferfile, "rb");
  107.     if (file != NULL)
  108.     {
  109.         unsigned        amtread;
  110.         patch_t*        patch;
  111.  
  112.         Log("Reading transfers file [%s]\n", transferfile);
  113.  
  114.         amtread = fread(&total_patches, sizeof(total_patches), 1, file);
  115.         if (amtread != 1)
  116.         {
  117.             goto FailedRead;
  118.         }
  119.         if (total_patches != numpatches)
  120.         {
  121.             goto FailedRead;
  122.         }
  123.  
  124.         long patchcount = total_patches;
  125.         for (patch = g_patches; patchcount-- > 0; patch++)
  126.         {
  127.             amtread = fread(&patch->iIndex, sizeof(patch->iIndex), 1, file);
  128.             if (amtread != 1)
  129.             {
  130.                 goto FailedRead;
  131.             }
  132.             if (patch->iIndex)
  133.             {
  134.                 patch->tIndex = (transfer_index_t*)AllocBlock(patch->iIndex * sizeof(transfer_index_t *));
  135.                 hlassume(patch->tIndex != NULL, assume_NoMemory);
  136.                 amtread = fread(patch->tIndex, sizeof(transfer_index_t), patch->iIndex, file);
  137.                 if (amtread != patch->iIndex)
  138.                 {
  139.                     goto FailedRead;
  140.                 }
  141.             }
  142.  
  143.             amtread = fread(&patch->iData, sizeof(patch->iData), 1, file);
  144.             if (amtread != 1)
  145.             {
  146.                 goto FailedRead;
  147.             }
  148.             if (patch->iData)
  149.             {
  150. #ifdef HLRAD_HULLU
  151.         if(g_rgb_transfers)
  152.         {
  153.                     patch->tRGBData = (rgb_transfer_data_t*)AllocBlock(patch->iData * sizeof(rgb_transfer_data_t *));
  154.                     hlassume(patch->tRGBData != NULL, assume_NoMemory);
  155.                     amtread = fread(patch->tRGBData, sizeof(rgb_transfer_data_t), patch->iData, file);            
  156.         }
  157.         else
  158.         {
  159.                     patch->tData = (transfer_data_t*)AllocBlock(patch->iData * sizeof(transfer_data_t *));
  160.                     hlassume(patch->tData != NULL, assume_NoMemory);
  161.                     amtread = fread(patch->tData, sizeof(transfer_data_t), patch->iData, file);            
  162.         }
  163. #else
  164.                 patch->tData = (transfer_data_t*)AllocBlock(patch->iData * sizeof(transfer_data_t *));
  165.                 hlassume(patch->tData != NULL, assume_NoMemory);
  166.                 amtread = fread(patch->tData, sizeof(transfer_data_t), patch->iData, file);
  167. #endif
  168.                 if (amtread != patch->iData)
  169.                 {
  170.                     goto FailedRead;
  171.                 }
  172.             }
  173.         }
  174.  
  175.         fclose(file);
  176.         Warning("Finished reading transfers file [%s] %d\n", transferfile);
  177.         return true;
  178.     }
  179.     Warning("Failed to open transfers file [%s]\n", transferfile);
  180.     return false;
  181.  
  182.   FailedRead:
  183.     {
  184.         unsigned        x;
  185.         patch_t*        patch = g_patches;
  186.  
  187.         for (x = 0; x < g_num_patches; x++, patch++)
  188.         {
  189.             FreeBlock(patch->tData);
  190.             FreeBlock(patch->tIndex);
  191.             patch->iData = 0;
  192.             patch->iIndex = 0;
  193.             patch->tData = NULL;
  194.             patch->tIndex = NULL;
  195.         }
  196.     }
  197.     fclose(file);
  198.     unlink(transferfile);
  199.     return false;
  200. }
  201.